Forward error correction (FEC) systems are components in communication systems whose purpose is to overcome noise resulting from channel fluctuations. FEC systems include an encoder and a decoder, where the encoder receives strings of binary bits known as messages, to which it may add parity bits that are computed from each message. The resulting string is known as a codeword. Codewords are input into a communication channel that may corrupt codewords by noise. A decoder obtains noisy channel outputs and attempts to reproduce an exact replica of message bits by using corresponding parity bits. The encoder and decoder agree on a code, which is a protocol describing how parity bits are computed, and often includes a parity matrix. Relevant noisy communication channels include wireless communications, flash memory voltage fluctuations, optical distortions in fiber-optic communications, and many more. The objective of FEC system design is to reduce bit error rate (BER) at the decoder output. BER is a function of several parameters including codeword length (known as block length), level of channel noise, and code rate which measures the ratio between message length and block length.